#include "ubt_state/ubt_state_diagram.h"
#include <execinfo.h>
#include <signal.h>
#include <iostream>
#include "ubt_state/ubt_state_util.h"
#include "ubt_state/node.h"

void handleSignal(int sig) 
{
  void* array[10];
  size_t size;

  // 获取栈信息
  size = backtrace(array, 10);

  // 打印栈信息
  std::cerr << "程序挂掉了，栈信息：" << std::endl;
  // backtrace_symbols_fd(array, size, STDERR_FILENO);


  // 继续处理信号
  signal(sig, SIG_DFL);
  raise(sig);
}


rclcpp::Node::SharedPtr node;

int main(int argc, char *argv[])
{
	rclcpp::init(argc, argv);

	node =  std::make_shared<rclcpp::Node>("ubt_state_node");
  
  
  // 设置信号处理函数，捕获异常并打印栈信息
  signal(SIGSEGV, handleSignal);
	
    //初始化日志管理器
  ubt_state::initialSpdloger();
  ubt_state::ulogger->info("------------------------状态机节点启动-----------------------");

    // 状态机加入
	ubt_state::CStateDiagram sm;
	return sm.Run(argc,argv);
}


